/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import modelo.LigaUsuarioConsumidor;
import modelo.Usuario;
import negocio.LigarUsuarioBI;
import negocio.UsuarioBI;

/**
 *
 * @author Francisco
 */
@ManagedBean(name="permisosCtrl")
@ViewScoped
public class PermisosCtrl {
    
    @Inject
    private UsuarioBI usuarioBI;
    @Inject
    private LigarUsuarioBI ligarUsuarioBI;
    
    private LoginCtrl login;
    private Usuario usuario;
    public Map<String, Integer> usuarios;
    public Map<String, Integer> consumidores;
    
    private Integer idUsuarioSeleccionado;
    private Integer idLigaUsuarioSeleccionada;
    private Boolean operarIngreso = false;
    private Boolean operarConsumo = false;
    
    @PostConstruct
    public void init(){
        try{
            login = (LoginCtrl)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
            String nombreUsuario = login.getUsuario();
            usuario = usuarioBI.buscarUsuario(nombreUsuario);
            List<Usuario> usuLigados = usuarioBI.buscarUsuariosLigados(usuario.getIdUsuario());
            if(usuLigados!=null){
                usuarios = new HashMap<String, Integer>();
                for (Usuario usuLigad : usuLigados) {
                    usuarios.put(usuLigad.getNombreUsuario(), usuLigad.getIdUsuario());
                }
            }
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void seleccionoUsuario(){
        try{
            if(idUsuarioSeleccionado!=null){
                Usuario usuarioDest = usuarioBI.buscarUsuarioPorId(idUsuarioSeleccionado);
                if(usuarioDest==null){
                    throw new Exception("No existe el usuario");
                }
                List<LigaUsuarioConsumidor> ligas = ligarUsuarioBI.buscarLigaPorUsuarioDestino(usuario.getIdUsuario(), idUsuarioSeleccionado);
                consumidores = new HashMap<String, Integer>();
                if(ligas!=null){
                    for (LigaUsuarioConsumidor luc : ligas) {
                        consumidores.put(luc.getIdUsuario().getNombreUsuario() +" - "+ luc.getIdConsumidor().getNombre(), luc.getIdLigaUsuarioConsumidor());
                    }
                }
            }
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void guardar(){
        try{
            if(idLigaUsuarioSeleccionada==null){
                throw new Exception("Se debe seleccionar un consumidor");
            }
            
            ligarUsuarioBI.actualizaPermisos(idLigaUsuarioSeleccionada, operarIngreso, operarConsumo);
            cancelar();
            
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_INFO, "Listo", "Guardado con éxito"));
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void cancelar(){
        idLigaUsuarioSeleccionada = null;
        idLigaUsuarioSeleccionada = null;
        operarConsumo = false;
        operarIngreso = false;
    } 

    public Map<String, Integer> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(Map<String, Integer> usuarios) {
        this.usuarios = usuarios;
    }

    public Map<String, Integer> getConsumidores() {
        return consumidores;
    }

    public void setConsumidores(Map<String, Integer> consumidores) {
        this.consumidores = consumidores;
    }

    public Integer getIdUsuarioSeleccionado() {
        return idUsuarioSeleccionado;
    }

    public void setIdUsuarioSeleccionado(Integer idUsuarioSeleccionado) {
        this.idUsuarioSeleccionado = idUsuarioSeleccionado;
    }

    public Integer getIdLigaUsuarioSeleccionada() {
        return idLigaUsuarioSeleccionada;
    }

    public void setIdLigaUsuarioSeleccionada(Integer idLigaUsuarioSeleccionada) {
        this.idLigaUsuarioSeleccionada = idLigaUsuarioSeleccionada;
    }

    public Boolean getOperarIngreso() {
        return operarIngreso;
    }

    public void setOperarIngreso(Boolean operarIngreso) {
        this.operarIngreso = operarIngreso;
    }

    public Boolean getOperarConsumo() {
        return operarConsumo;
    }

    public void setOperarConsumo(Boolean operarConsumo) {
        this.operarConsumo = operarConsumo;
    }
}
